package com.zsyc;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import java.io.IOException;
import java.util.logging.Logger;
import java.util.logging.Level;
import com.zsyc.controller.MainController;

/**
 * 主应用程序类
 */
public class Main extends Application {
    private static final Logger LOGGER = Logger.getLogger(Main.class.getName());
    
    @Override
    public void start(Stage primaryStage) {
        try {
            // 初始化数据库
            com.zsyc.util.DatabaseManager.initializeDatabase();
            
            // 加载主界面FXML
            FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/MainView.fxml"));
            Parent root = loader.load();
            
            // 获取主控制器并设置主舞台引用
            MainController mainController = loader.getController();
            if (mainController != null) {
                mainController.setPrimaryStage(primaryStage);
            }
            
            // 创建场景
            Scene scene = new Scene(root);
            scene.getStylesheets().add(getClass().getResource("/css/styles.css").toExternalForm());
            
            // 设置舞台
            primaryStage.setTitle("多功能学习辅助工具 - ZSYC Learning Assistant");
            primaryStage.setScene(scene);
            primaryStage.setMinWidth(1000);
            primaryStage.setMinHeight(700);
            primaryStage.setWidth(1200);
            primaryStage.setHeight(800);
            primaryStage.centerOnScreen();
            
            // 显示舞台
            primaryStage.show();
            
            LOGGER.info("应用程序启动成功");
            
        } catch (IOException e) {
            LOGGER.log(Level.SEVERE, "启动应用程序失败", e);
            showErrorDialog("启动失败", "无法加载主界面：" + e.getMessage());
        } catch (Exception e) {
            LOGGER.log(Level.SEVERE, "应用程序启动时发生未知错误", e);
            showErrorDialog("启动失败", "应用程序启动时发生未知错误：" + e.getMessage());
        }
    }
    
    @Override
    public void stop() {
        try {
            // 关闭数据库连接
            com.zsyc.util.DatabaseManager.closeConnection();
            LOGGER.info("应用程序正常关闭");
        } catch (Exception e) {
            LOGGER.log(Level.WARNING, "关闭应用程序时发生错误", e);
        }
    }
    
    /**
     * 显示错误对话框
     */
    private void showErrorDialog(String title, String content) {
        // 在控制台输出错误信息
        System.err.println("错误: " + title);
        System.err.println("详情: " + content);
        
        // 如果JavaFX环境可用，显示错误对话框
        try {
            javafx.scene.control.Alert alert = new javafx.scene.control.Alert(
                javafx.scene.control.Alert.AlertType.ERROR);
            alert.setTitle("错误");
            alert.setHeaderText(title);
            alert.setContentText(content);
            alert.showAndWait();
        } catch (Exception e) {
            // 如果无法显示对话框，只在控制台输出
            System.err.println("无法显示错误对话框: " + e.getMessage());
        }
    }
    
    /**
     * 主方法
     */
    public static void main(String[] args) {
        try {
            // 设置日志格式
            System.setProperty("java.util.logging.SimpleFormatter.format", 
                "[%1$tF %1$tT] [%4$-7s] %2$s: %5$s%6$s%n");
            
            LOGGER.info("正在启动多功能学习辅助工具...");
            
            // 启动JavaFX应用
            launch(args);
            
        } catch (Exception e) {
            LOGGER.log(Level.SEVERE, "应用程序启动失败", e);
            System.err.println("应用程序启动失败: " + e.getMessage());
            e.printStackTrace();
            System.exit(1);
        }
    }
}
